package cmddata

import (
	"encoding/json"
	"gitee.com/captials-team/ubdframe/src/pkg/wsserver"
	"strings"
)

// ClientCmd client操作命令
type ClientCmd struct {
	Action string           `json:"action"`
	Args   interface{}      `json:"args"`
	Client *wsserver.Client `json:"-"`

	OrigMessage *wsserver.WebSocketMessage `json:"-"`

	//解析后的actions数组
	actions []string `json:"-"`
}

// FirstAction 解析action中的第1个action
func (cmd *ClientCmd) FirstAction() string {
	return cmd.ParseAction(0)
}

// ParseAction 解析action中的第n个参数（n从0开始），若不存在则返回空字符串
func (cmd *ClientCmd) ParseAction(index int) string {
	if cmd.actions == nil {
		cmd.actions = strings.Split(cmd.Action, ActionSepChar)
	}
	if index >= 0 && index < len(cmd.actions) {
		return cmd.actions[index]
	}
	return ""
}

// ClientAnswer client返回数据
type ClientAnswer struct {
	Code    int64       `json:"code"`
	Group   string      `json:"group"`
	Message string      `json:"message"`
	Data    interface{} `json:"data"`
}

// BuildActionName 构建action名称
func BuildActionName(s ...string) string {
	return strings.Join(s, ActionSepChar)
}

// ConvertCmdArgs 解析消息cmd的args
func ConvertCmdArgs(data interface{}, cmd *ClientCmd) error {
	parse := &ClientCmd{
		Args: data,
	}

	if err := json.Unmarshal(cmd.OrigMessage.Message, parse); err != nil {
		return err
	}
	return nil
}

type DoSomeThing func(*wsserver.Client) ActRet

const ActionSepChar = "." //action 分隔字符
